package g

import (
	"fmt"
	"time"
)

//NOTE: 各游戏不同的常量，在game/internal下的模块中

const (
	GameName = "jmg"

	//新的游戏代号
	Jmg = 3600

	//架构相关参数
	ConfigReloadCycle    = 30 * time.Second
	GameBeginDelay       = 1 * time.Second
	TableMaxUserCount    = 200
	MaxUserSyncQueue     = 2000            //用户最大等待同步数据，太小会导致房间协程阻塞，太大有金币锁失灵风险
	MaxRobotSyncQueue    = 10000           //机器人允许长时间等待同步，就算失败影响也不大
	UserSyncGoroutine    = 16              //同步用户数据到数据库的协程数
	RobotSyncGoroutine   = 4               //同步机器人数据到数据库到协程数，协程个数决定了对数据库的连接数
	ReloadRobotInterval  = 5 * time.Minute //每隔一段时间重新从数据库reload新增的机器人到队列
	MaxSyncBetCycle      = 500             //与客户端同步下注信息的间隔，毫秒
	MinSyncBetCycle      = 300             //与客户端同步下注信息的间隔，毫秒
	MaxTablePreHeatTurns = 30              //开放给用户之前的预热局数
	MinTablePreHeatTurns = 20              //开放给用户之前的预热局数
	MinRobotCount        = 30              //房间最少机器人数量
	RoomIdleLimit        = 600             //用于未开局检测，单位秒

	MaxNoUserCloseTableCount = 0 //没有玩家就关闭桌子的累计次数

	//通用业务参数
	CoinRate            = 1000
	MaxBankerQueueSize  = 5  //排队坐庄的最多人数（不含系统）
	MaxHoldBankerTimers = 5  //最多连庄次数
	RichUserCount       = 5  //大富豪数目
	TopTermCount        = 20 //坐席计算依据，最近X局
	WinHistorySize      = 20 //路纸/开奖历史，都用最近20局
	TopBetCount         = 50 //场内下注top数目
	InitRichUserCount   = 6

	//桌子内消息
	EventAddUser = iota
	EventUserBet
	EventUserBanker
	EventRemoveUser
	EventSyncRoomST
	EventSyncUserST
	EventQueryTableUsers
	EventUpdateAfterSettle

	//大厅消息
	EventReleaseGoldLock
	TopicCommon = "jmg"

	RechargeUser        = 1 //充提比
	BetMoreThanRecharge = 2 //下注大于充值
)

var (
	AllGameTypes = []int32{Jmg}
)

var BetChannels = []string{"single_purse_bet", "single_purse_bet_result"}

func GetCodeLabel(code int32) string {
	switch code {
	case Jmg:
		return "jmg"
	default:
		return ""
	}
}

func GetCodeName(code int32) string {
	switch code {
	case Jmg:
		return "jmg"
	default:
		return ""
	}
}

func GetLabelCode(name string) int32 {
	switch name {
	case "jmg":
		return Jmg
	default:
		return -1
	}
}

func GetRedisKeyPrefix(code int32) string {
	return fmt.Sprintf("cube:%s", GetCodeLabel(code))
}
